import { Context, Next } from 'koa';
import { verifyToken } from '@/utils/token.util';

/**
 * 身份验证中间件
 * 验证请求头中的 Authorization 字段
 * 格式: Bearer [token]
 */
export default async function authMiddleware(ctx: Context, next: Next) {
    try {
        // 获取 Authorization 头
        const authHeader = ctx.headers.authorization;
        
        if (!authHeader) {
            ctx.status = 401;
            ctx.body = { code: 401, message: '未提供身份验证令牌' };
            return;
        }

        // 检查 Authorization 格式
        const parts = authHeader.split(' ');
        if (parts.length !== 2 || parts[0] !== 'Bearer') {
            ctx.status = 401;
            ctx.body = { code: 401, message: '令牌格式错误' };
            return;
        }

        const token = parts[1];
        
        // 验证 token
        try {
            const payload = await verifyToken(token);
            // 将用户信息添加到上下文中，供后续中间件和路由处理函数使用
            ctx.state.user = payload;
            await next(); // 调用下一个中间件或路由处理函数
        } catch (error) {
            ctx.status = error.status || 401;
            ctx.body = { code: error.status || 401, message: error.message || '身份验证失败' };
        }
    } catch (error) {
        ctx.status = error.status || 500;
        ctx.body = { code: error.status || 500, message: error.message || 'Internal server error' };
    }
}
